Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Лабораторна робота №5
з курсу:
«Засоби системного прграмування»
на тему:«Дослідження роботи команд переходів. Програмування задач з використанням алгоритмів розгалуження»
Варіант: №7
Вираз:
Львів
2014
МЕТА РОБОТИ:
Освоїти використання команд порівняння, умовного та безумовного переходів. Набути вміння використовувати арифметичні команди над знаковими даними та команди логічних операцій.
ТЕОРЕТИЧНІ ВІДОМОСТІ:
Команди керування програмою.
Команда безумовного переходу JMP.
Дана команда додає значення вказане в операнді до значення в регістрі IP, який містить адресу команди, що розташована після JMP. Відповідно, якщо здійснюється перехід назад, то значення операнду буде від’ємне, якщо вперед – додатне.
Команди умовних переходів.
Працюють аналогічно до JMP та LOOP, за винятком того, що довжина переходу повинна бути в межах від -128 до +128 байт.
Переходи для беззнакових даних.
Мнемоніка
Опис
Прапорці, що перевіряються
JE/JZ
Перехід, якщо рівно/нуль
ZF
JNE/JNZ
Перехід, якщо не рівно/не нуль
ZF
JA/JNBE
Перехід, якщо вище/не нижче або рівно
ZF,CF
JAE/JNB
Перехід, якщо вище або рівно/ не нижче
CF
JB/JNAE
Перехід, якщо нижче/не вище або рівно
CF
JBE/JNA
Перехід, якщо нижче або рівно/не вище
CF,AF
Будь яку перевірку можна закодувати двома мнемо кодами. Наприклад JB та JNAE генерують однаковий об’єктний код, хоча позитивну перевірку JB легше зрозуміти аніж заперечну JNAE.
Переходи для знакових даних.
Мнемоніка
Опис
Прапорці, що перевіряються
JE/JZ
Перехід, якщо рівно/нуль
ZF
JNE/JNZ
Перехід, якщо не рівно/не нуль
ZF
JG/JNLE
Перехід, якщо більше/не менше або рівно
ZF,SF,OF
JGE/JNL
Перехід, якщо більше або рівно/ не менше
SF,OF
JL/JNE
Перехід, якщо менше/не більше або рівно
SF,OF
JLE/JNG
Перехід, якщо менше або рівно/не більше
ZF,SF,OF
Команди переходу для умови рівно або нуль (JE/JZ) та не рівно або не нуль (JNE/JNZ) існують як для знакових так і для без знакових даних. Стан рівно/нуль наступає незалежно від знаку.
Спеціальні арифметичні перевірки.
Мнемоніка
Опис
Прапорці, що перевіряються
JS
Перехід, якщо є знак(від’ємне)
SF
JNS
Перехід, якщо немає знаку(додатнє)
SF
JC
Перехід, якщо є перенос (аналогічно JB)
CF
JNC
Перехід, якщо немає переносу
CF
JO
Перехід, якщо є переповнення
OF
JNO
Перехід, якщо немає переповнення
OF
JP/JPE
Перехід, якщо паритет парний
PF
JNP/JP
Перехід, якщо паритет непарний
PF
JCXZ - ще одна команда умовного переходу перевіряє чи рівний вміст регістра CX нулю. Ця команда повинна знаходитися безпосередньо після арифметичної команди чи команди порівняння. Одним з можливих місць застосування команди JCXZ може бути початок циклу, де вона перевіряє чи не містить регістр CX нульового значення.
Оператор циклу LOOP.
Передає керування на мітку, вказану як операнд, поки значення в регістрі CX не стане рівне нулю.
mov cx, 5
Lab:
mov ax, bx
inc ax
loop Lab
тобто оператори (mov ax, bx) та (inc ax) повторяться 5 разів.
Існують додатково також різновиди цієї команди:
LOOPE(або LOOPZ) – передає керування за адресою, вказаною в операнді якщо CX містить нульове значення і встановлений прапорець нуля, тобто ZF=1.
LOOPNE(або LOOPNZ) передає керування за адресою, вказаною в операнді якщо CX містить нульове значення і прапорець нуля скинуто, тобто ZF=0.
Команди порівняння
CMP - Порівняння двох полів даних.
Команда виконує віднімання другого операнду від першого, але значення операндів не змінює. Операнди повинні бути однакової довжини: байт або слово. Команда може мати наступний формат:
CMP регістр-регістр;
CMP пам'ять-регістр;
CMP безпосереднє значення -регістр;
CMP регістр-пам’ять;
CMP безпосереднє значення –пам’ять
Ця команда впливає на прапорці AF,CF,OF, PF,SF,ZF
CMPS, CMPSB, CMPSW Порівняння рядків довільної довжини. CMPSB – порівнює по байту, CMPSW – порівнює по словах. Перший о...